package com.dmcb.common.business.utils;

import org.apache.commons.lang3.StringUtils;

import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexUtil {

    /**
     * 是否是邮箱或手机号
     *
     * @param str
     * @return
     */
    public static boolean isEmailOrMob(String str) {
        return isEmail(str) || isMob(str);
    }

    /**
     * 验证邮箱地址是否正确
     *
     * @param email
     * @return
     */
    public static boolean isEmail(String email) {
        if (StringUtils.isBlank(email)) {
            return false;
        }
        try {
            String check = "^([a-z0-9A-Z]+[-|.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?.)+[a-zA-Z]{2,}$";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            return matcher.matches();
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 验证手机号码
     * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
     * 联通：130、131、132、152、155、156、185、186
     * 电信：133、153、180、189、（1349卫通）
     *
     * @param mobile
     * @return [0-9]{5,9}
     */
    public static boolean isMob(String mobile) {
        if (StringUtils.isBlank(mobile)) {
            return false;
        }
        Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
        Matcher m = p.matcher(mobile);
        return m.matches();
    }

    public static boolean isNum(String number) {
        if (StringUtils.isBlank(number)) {
            return false;
        }
        try {
            Pattern p = Pattern.compile("[0-9]*");
            Matcher m = p.matcher(number);
            return m.matches();
        } catch (Exception e) {
            return false;
        }
    }

    public static Integer getNum(String s) {
        if (StringUtils.isBlank(s)) {
            return null;
        }
        try {
            Pattern p = Pattern.compile("(\\d+)");
            Matcher m = p.matcher(s);
            if (m.find()) {
                return Integer.valueOf(m.group(1));
            }
        } catch (Exception e) {
            return null;
        }
        return null;
    }

    /**
     * 获取url参数
     *
     * @param url   链接
     * @param param 参数
     * @return 值
     */
    public static String getParam(String url, String param) {
        if (StringUtils.isBlank(url)) {
            return null;
        }
        try {
            String u = URLDecoder.decode(url, "UTF-8");
            Pattern p = Pattern.compile(param + "=([^&]*)(&|$)");
            Matcher m = p.matcher(u);
            if (m.find()) {
                return m.group(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static List<String> getEmList(final String s) {
        String regex;
        final List<String> list = new ArrayList<String>();
        regex = "<em>.*?</em>";
        final Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
        final Matcher ma = pa.matcher(s);
        while (ma.find()) {
            list.add(ma.group());
        }
        return list;
    }

    /**
     * 获取<em>标签内的字符串
     *
     * @param s 参数
     * @return 字符
     */
    public static String getEmText(final String s) {
        List<String> list = getEmList(s);
        if (ListUtil.isEmpty(list)) {
            return "";
        }
        return list.toString().replaceAll("<(/?)em>|\\[|\\]|,", "");
    }

    /**
     * 是否以start开头，正则匹配
     *
     * @param str   字符串
     * @param start 起始字符
     * @return 是、否
     */
    public static boolean startWith(String str, String start) {
        return StringUtils.isNotBlank(str) && str.matches("^" + start + ".*");
    }

    /**
     * 是否以domain开头，正则匹配
     *
     * @param link   链接
     * @param domain 域名
     * @return 是、否
     */
    public static boolean startWithDomain(String link, String domain) {
        return StringUtils.isNotBlank(link) && StringUtils.isNotBlank(domain) && link.replaceFirst("(http|https)://", "").matches("^" + domain.replaceFirst("(http|https)://", "") + ".*");
    }

    /**
     * 返回主域名
     *
     * @param s 匹配字符串
     * @return 主域名
     */
    public static String getDomain(String s) {
        if (StringUtils.isBlank(s)) {
            return "";
        }
        Pattern p = Pattern.compile("(?<=://).+?(?=/)");
        Matcher m = p.matcher(s);
        if (m.find()) {
            return m.group();
        }
        return "";
    }

    /**
     * 返回http域名
     *
     * @param link 匹配字符串
     * @return http域名
     */
    public static String getStart(String link, String start) {
        Pattern p = Pattern.compile("^(" + start + ").*");
        Matcher m = p.matcher(link);
        if (m.find()) {
            return m.group(1);
        }
        return "";
    }

    /**
     * 返回http域名
     *
     * @param link 匹配字符串
     * @return http域名
     */
    public static String getStartWithEnd(String link, String end) {
        Pattern p = Pattern.compile("^(.*" + end + ").*");
        Matcher m = p.matcher(link);
        if (m.find()) {
            return m.group(1);
        }
        return "";
    }

//    public static void main(String[] args) {
//        System.out.println(getNum("3天前"));
//        System.out.println(getNum("4小时前"));
//    }

}
